import axios from "axios";

// 创建一个自定义的 axios 实例
const myAxios = axios.create({
  // 区分开发环境和线上环境
  baseURL:
    process.env.NODE_ENV === "development"
      ?
      // "http://localhost:8081"
      "http://47.96.131.68:8081"
      : "http://47.96.131.68:8081",
  timeout: 10000,// 设置请求的超时时间为 10 秒
  withCredentials: true,// 允许跨域请求时携带凭证（如 Cookies）
});

// 添加请求拦截器
myAxios.interceptors.request.use(
  function (config) {
    // 请求发送前的处理操作
    return config; // 返回配置对象
  },
  function (error) {
    // 请求错误时的处理
    return Promise.reject(error); // 返回一个被拒绝的 Promise，继续错误处理链
  }
);

// 添加响应拦截器
myAxios.interceptors.response.use(
  function (response) {
    // 响应成功时的处理
    // 任何状态码在 2xx 范围内都会触发此函数
    console.log(response); // 打印响应对象
    const { data } = response; // 解构出响应数据部分
    console.log(data); // 打印响应数据

    // 如果返回的代码是未登录状态（假设 40100 为未登录的错误代码）
    if (data.code === 40100) {
      // 如果请求的不是获取用户信息的接口，或者当前页面不是登录页面，则跳转到登录页面
      if (
        !response.request.responseURL.includes("user/current") && // 排除获取用户信息的请求
        !window.location.pathname.includes("/user/login") // 排除当前页面是登录页面
      ) {
        window.location.href = `/user/login?redirect=${window.location.href}`; // 跳转到登录页面，并带上当前页面的 URL，登录后可自动跳转回来
      }
    }
    return response; // 返回响应对象
  },
  function (error) {
    // 响应错误时的处理
    // 任何状态码不在 2xx 范围内都会触发此函数
    return Promise.reject(error); // 返回一个被拒绝的 Promise，继续错误处理链
  }
);

export default myAxios; // 导出自定义的 axios 实例
